package com.example.lin.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtils {

    // 默认日期格式
    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    public static final String YMD_FORMAT = "yyyyMMdd";
    public static final String YMDHS_FORMAT = "yyMMddHHmmss";
    public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String NUMBERDATEFORMAT = "yyyyMMddHHmmss";

    /**
     * 将字符串转换为日期
     *
     * @param dateStr 日期字符串
     * @param format  日期格式
     * @return 转换后的日期对象
     * @throws ParseException 如果解析失败
     */
    public static Date parse(String dateStr, String format) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.parse(dateStr);
    }

    /**
     * 将日期转换为字符串
     *
     * @param date   日期对象
     * @param format 日期格式
     * @return 格式化后的日期字符串
     */
    public static String format(Date date, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }

    /**
     * 获取当前日期
     *
     * @return 当前日期
     */
    public static Date getCurrentDate() {
        return new Date();
    }

    /**
     * 获取当前日期字符串
     *
     * @param format 日期格式
     * @return 格式化后的当前日期字符串
     */
    public static String getCurrentDateString(String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(new Date());
    }

    /**
     * 增加天数
     *
     * @param date 日期对象
     * @param days 增加的天数
     * @return 增加天数后的日期对象
     */
    public static Date addDays(Date date, int days) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, days);
        return calendar.getTime();
    }

    /**
     * 增加月份
     *
     * @param date   日期对象
     * @param months 增加的月份
     * @return 增加月份后的日期对象
     */
    public static Date addMonths(Date date, int months) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, months);
        return calendar.getTime();
    }

    /**
     * 增加年份
     *
     * @param date  日期对象
     * @param years 增加的年份
     * @return 增加年份后的日期对象
     */
    public static Date addYears(Date date, int years) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, years);
        return calendar.getTime();
    }
}
